package meta

import (
	"fmt"
	"pan/db"
)

// FileMeta: 文件元信息结构体
type FileMeta struct {
	FileHash string `json:"filesha1"`
	FileName string `json:"filename"`
	FileSize int64  `json:"filesize"`
	Location string `json:"location"`
	UploadAt string `json:"upload_at"`
}

var fileMetas map[string]FileMeta

func init() {
	fileMetas = make(map[string]FileMeta)
}

// UpdateFileMeta: 新增/更新文件元信息
func UpdateFileMeta(fileMeta FileMeta) {
	fileMetas[fileMeta.FileHash] = fileMeta
}

// UpdateFileMetaToDB: 新增/更新文件元信息到数据库
func UpdateFileMetaToDB(fileMeta FileMeta) bool {
	return db.OnFileUploadFinished(fileMeta.FileHash, fileMeta.FileName, fileMeta.Location, fileMeta.FileSize)
}

// GetFileMeta: 通过hash获取文件元信息
func GetFileMeta(fileHash string) FileMeta {
	return fileMetas[fileHash]
}

// GetFileMetaFromDB: 从数据库中通过hash获取文件元信息
func GetFileMetaFromDB(fileHash string) FileMeta {
	file, err := db.GetFileMeta(fileHash)
	if err != nil {
		fmt.Println(err)
		return FileMeta{}
	}
	fileMeta := FileMeta{
		FileHash: file.FileHash,
		FileName: file.FileName.String,
		FileSize: file.FileSize.Int64,
		Location: file.FileAddr.String,
	}
	return fileMeta
}

// RemoveFileMeta: 删除元信息
func RemoveFileMeta(fileHash string) {
	delete(fileMetas, fileHash)
}
